#include <gflags/gflags.h>
#include "spdlogger.hpp"
#include "etcd.hpp"

/*
    测试二次封装的etcd的服务发现类
*/

DEFINE_bool(mode, false, "日志输出模式，true:发布模式，false:调试模式");
DEFINE_int32(release_level, 0, "发布模式下日志记录等级，此等级以上日志都记录");
DEFINE_string(file, "file.txt", "发布模式下日志输出文件");

DEFINE_string(etcd_url, "http://127.0.0.1:2379", "客户端访问etcd服务的url");
DEFINE_string(server_base_dir, "/services", "服务根目录");

// 上线回调（put事件）
void online(const std::string& key, const std::string& value)
{
    LOG_INFO("{}上线服务：{}", value, key);
}

// 下线回调（del事件）
void offline(const std::string& key, const std::string& value)
{
    LOG_INFO("{}下线服务：{}", value, key);
}

int main(int argc, char* argv[])
{
    // 解析命令行参数
    google::ParseCommandLineFlags(&argc, &argv, true);

    // 初始化日志记录器
    ns_spdlogger::init_logger(FLAGS_mode, FLAGS_release_level, FLAGS_file);
    
    // 服务发现对象（创建即监听）
    shared_ptr<ns_etcd::Discovery> dcy = make_shared<ns_etcd::Discovery>(FLAGS_etcd_url, 
        FLAGS_server_base_dir, online, offline);

    return 0;
}